// 1.es6新增了一个变量声明：let ，它和var变量声明非常相似
// 2.创建块级区域 {}
// 3.var出了块级区域有效的, let出了块级区域有效的, 
// 4.var有变量提升的功能,不管在哪里声明,视作作用域顶部声明
// {
//     var value=10;
//     let count=20;//ReferenceError
// }
// console.log(value);
// console.log(count);

// 5.let不具备变量提升的能力,离开块级的作用域后,则变量立刻失效
// console.log(value);//undefined
// var value;//变量提升导致逻辑怪异

// console.log(count);//引用错误
// let count;

// 6.哪种更好? let更适合局部变量,非常容易掌控而且不易混乱,只要使用了let,这个区域形成了封闭的作用域
// 如果在let声明前使用变量,这段区域被称为"临时死区(暂时性死区TDZ)"
// if(true){
    //死区开始
    // value=20;
    // console.log(value);
    // //死区结束
    // let value=10;
    // console.log(value);
    // console.log(typeof value);
    // let value;

// }


// 7.var可以重复声明一个变量,后面变量可以取代前面的变量
// 8.let声明不可以重复,会直接报错,就算其中一个是var
// {
//     var value=30;
//     let value=20
// }

// 9.如果一个在作用域外部,一个在作用域的内部,可以并存
// let value=20
// {
//     let value=30
// }
// console.log(value);

// 10.在循环,区别明显
// for(let i=0;i<10;i++){
//     console.log(i);
// }
// console.log(i);

// 11.设置函数方法,体外输出var 会得不到想要的值
// var list=[];
// for(let i=0;i<10;i++){
//     list[i]=function(){
//         console.log(i);//10
//     }
// }
// list[6]()// 不管设置多少都是10

// const声明
// const声明的作用是:创建 的一个只读的常量,一旦声明不可以改变
// const声明的常亮无法提升,也存在死区
// 和let不同,const声明的常量,在声明之后必须立刻赋值,否则会报错
//常量约定俗成大写
const PI=3.14;
console.log(PI);